//#include "HDF5Write.h"
//
/////
/////Split a string str by delimiter and save the substrings into tokens.
/////
//void Tokenize(const H5std_string& str, vector<H5std_string>& tokens, const H5std_string& delimiters)
//{
//	H5std_string _str(str);
//
//	H5std_string::iterator It=_str.begin();
//	// Skip delimiters at beginning.
//	H5std_string::size_type lastPos = _str.find_first_not_of(delimiters, 0);
//	// Find first "non-delimiter".
//	H5std_string::size_type pos     = _str.find_first_of(delimiters, lastPos);
//
//	while (H5std_string::npos != pos || H5std_string::npos != lastPos)
//	{
//		// Found a token, add it to the vector.
//		tokens.push_back(_str.substr(lastPos, pos - lastPos));
//		// Skip delimiters.  Note the "not_of"
//		lastPos = _str.find_first_not_of(delimiters, pos);
//		// Find next "non-delimiter"
//		pos = _str.find_first_of(delimiters, lastPos);
//	}
//}
///*!
//* \brief This construct function:
//* If filename does not exist, CHDF5Write creates it. If filename exists, CHDF5Write overwrites the existing file.
//*/
//CHDF5Write::CHDF5Write(const H5std_string& filename)
//:File_Name(filename)
//{
//	try
//	{
//		Exception::dontPrint();
//
//		h5_file=new H5File( File_Name, H5F_ACC_TRUNC);
//	}
//	// catch failure caused by the H5File operations
//	catch( FileIException error )
//	{
//		errMsg=error.getDetailMsg();
//	}
//}
//
//CHDF5Write::~CHDF5Write()
//{
//	if (h5_file!=NULL)
//	{
//		delete h5_file;
//	}
//}
//int CHDF5Write::write(const H5std_string& location, CHDF5 &chdf5, CHDF5Write::accessType accType)
//{
//	int res=0;
//
//	int rank=chdf5.rank;
//	hsize_t* sizet=new hsize_t[rank];
//	hsize_t* dims=new hsize_t[rank];
//	hsize_t* offset=new hsize_t[rank];
//
//	try
//	{
//		Exception::dontPrint();
//
//		if (isDataSetExist(location)&&accType==CHDF5Write::append)
//		{
//			DataSet dataset=h5_file->openDataSet(location);
//
//			DataType dType=dataset.getStrType();
//			for (int i=0;i<rank;i++)
//			{
//				sizet[i]=dType.getSize()+1+chdf5.dimension;
//				dims[i]=chdf5.dimension;
//				offset[i]=dType.getSize()+1;
//			}
//			dataset.extend( sizet );
//
//			DataSpace fileSpace = dataset.getSpace ();
//			fileSpace.selectHyperslab( H5S_SELECT_SET, dims, offset );
//
//			DataSpace mspace(rank,dims);
//			dataset.write(chdf5.buf,dataset.getDataType(),mspace,fileSpace);
//			dataset.close();
//		}
//		else
//		{
//			createDataSet(chdf5,location);
//
//			DataSet dataset=h5_file->openDataSet(location);
//
//			for (int i=0;i<rank;i++)
//			{
//				dims[i]=chdf5.dimension;
//				offset[i]=0;
//			}
//			dataset.extend(dims);
//
//			DataSpace fileSpace = dataset.getSpace();
//
//			fileSpace.selectHyperslab(H5S_SELECT_SET,dims,offset);
//
//			dataset.write(chdf5.buf,dataset.getDataType());
//			dataset.close();
//
//			res=1;
//		}
//
//	}
//	// catch failure caused by the H5File operations
//	catch( FileIException error )
//	{
//		errMsg=error.getDetailMsg();
//	}
//
//	// catch failure caused by the DataSet operations
//	catch( DataSetIException error )
//	{
//		errMsg=error.getDetailMsg();
//	}
//
//	// catch failure caused by the DataSpace operations
//	catch( DataSpaceIException error )
//	{
//		errMsg=error.getDetailMsg();
//	}
//
//	// catch failure caused by the DataSpace operations
//	catch( DataTypeIException error )
//	{
//		errMsg=error.getDetailMsg();
//	}
//
//	delete[] sizet;
//	delete[] dims;
//	delete[] offset;
//
//	return res;
//}
//
//bool CHDF5Write::isDataSetExist(const H5std_string& location)
//{
//
//	try
//	{
//		Exception::dontPrint();
//		h5_file->openDataSet(location);
//	}
//	// catch failure caused by the H5File operations
//	catch( FileIException error )
//	{
//		return false;
//	}
//	return true;
//}
//
//bool CHDF5Write::isGroupExist(const H5std_string& location)
//{
//
//	try
//	{
//		Exception::dontPrint();
//		h5_file->openGroup(location);
//	}
//	// catch failure caused by the H5File operations
//	catch( FileIException error )
//	{
//		return false;
//	}
//	return true;
//}
//
//void CHDF5Write::createGroups(vector<H5std_string>& paths)
//{
//	try
//	{
//		Exception::dontPrint();
//		H5std_string groupName="";
//		for (vector<H5std_string>::size_type i=0;i<paths.size()-1;i++)
//		{
//			groupName=groupName+"/"+paths[i];
//			if (!isGroupExist(groupName))
//			{
//				Group group(h5_file->createGroup(groupName));
//			}
//			else
//			{
//				break;
//			}
//			
//		}
//	}
//	// catch failure caused by the H5File operations
//	catch( FileIException error )
//	{
//		errMsg=error.getDetailMsg();
//	}
//
//	// catch failure caused by the Group operations
//	catch( GroupIException error )
//	{
//		errMsg=error.getDetailMsg();
//	}
//
//}
//void CHDF5Write::createDataSet(CHDF5& chdf5,const H5std_string& location)
//{
//	int rank=chdf5.rank;
//	int dimension=chdf5.dimension;
//
//	hsize_t* dims=new hsize_t[rank];
//	hsize_t* maxdims=new hsize_t[rank];
//	hsize_t* chunk_dims=new hsize_t[rank];
//	
//	try
//	{
//		Exception::dontPrint();
//
//		for (int i;i<rank;i++)
//		{
//			dims[i]=dimension;
//			maxdims[i]=dimension;
//			chunk_dims[i]=dimension;
//			chunk_dims[i]=H5S_UNLIMITED;
//		}
//
//		DataSpace dataspace(rank,dims,maxdims);
//
//		DSetCreatPropList cparms;
//
//		cparms.setChunk(rank,chunk_dims);
//
//		//int fill_val = 0;
//		//cparms.setFillValue( dataType, &fill_val);
//
//		vector<H5std_string> paths;
//		Tokenize(location,paths,"/");
//		createGroups(paths);
//
//		h5_file->createDataSet(location,chdf5.dType,dataspace,cparms);
//	}
//	// catch failure caused by the H5File operations
//	catch( FileIException error )
//	{
//		errMsg=error.getDetailMsg();
//	}
//
//	// catch failure caused by the DataSet operations
//	catch( DataSetIException error )
//	{
//		errMsg=error.getDetailMsg();
//	}
//
//	// catch failure caused by the DataSpace operations
//	catch( DataSpaceIException error )
//	{
//		errMsg=error.getDetailMsg();
//	}
//
//	// catch failure caused by the DataSpace operations
//	catch( DataTypeIException error )
//	{
//		errMsg=error.getDetailMsg();
//	}
//	delete[] dims;
//	delete[] maxdims;
//	delete[] chunk_dims;
//}